#!/bin/bash

# 多核CPU压力测试脚本
# 用法: ./stress_all_cpus.sh [持续时间(秒)]

# 默认运行60秒
duration=${1:-60}

# 获取CPU核心数
num_cores=$(nproc)

echo "开始对所有 $num_cores 个CPU核心进行压力测试，将持续 $duration 秒..."
echo "按 Ctrl+C 可随时终止测试"

# 为每个核心创建一个进程
for ((i=0; i<num_cores; i++))
do
    # 使用taskset绑定进程到特定CPU核心（如果可用）
    if command -v taskset &> /dev/null; then
        (
            taskset -c $i dd if=/dev/zero of=/dev/null bs=1M &
            echo "启动绑定到核心 $i 的进程 (PID: $!)"
        ) &
    else
        (
            # 创建一个无限循环进行密集计算
            while true; do
                echo "scale=20; 4*a(1)" | bc -l > /dev/null
            done
        ) &
        echo "启动负载进程 $i (PID: $!)"
    fi
done

# 记录所有进程的PID
pids=$(jobs -p)

# 等待指定的持续时间
echo "所有核心已启动压力测试，等待 $duration 秒..."
sleep $duration

# 终止所有创建的进程
echo "终止所有压力测试进程..."
for pid in $pids; do
    kill -9 $pid 2>/dev/null
done

# 确保所有后台进程都已被终止
pkill -P $$ 2>/dev/null

echo "CPU压力测试完成!" 